package pl.butler.cezary.syncTool.storage.metadata;

import java.io.File;
import java.io.Serializable;

public class FileVersionMetadata implements Serializable{

    private final File plik;
    private long dataModyfikacji;
    private long rozmiarPliku;   
    private final String sumaKontrolna;
    private final FileVersionMetadata prevVersion;

    public FileVersionMetadata(File plik, FileVersionMetadata prevVersion, String sumakontrolna) {
        this.plik = plik;
        dataModyfikacji = plik.lastModified();
        rozmiarPliku = plik.length();
        this.sumaKontrolna = sumakontrolna;
        this.prevVersion = prevVersion;
    }
    
    public FileVersionMetadata(File plik, String sumakontrolna){
        this(plik,null,sumakontrolna);
    }

    public long getDataModyfikacji() {
        return dataModyfikacji;
    }

    public long getRozmiarPliku() {
        return rozmiarPliku;
    }

    public String getSumaKontrolna() {
        return sumaKontrolna;
    }

    public File getPlik() {
        return plik;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final FileVersionMetadata other = (FileVersionMetadata) obj;
        if (this.dataModyfikacji != other.dataModyfikacji) {
            return false;
        }
        if (this.rozmiarPliku != other.rozmiarPliku) {
            return false;
        }
        if (this.plik != other.plik && !this.plik.equals(other.plik))
        {
            return false;
        }
        if (!this.sumaKontrolna.equals(other.sumaKontrolna)) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 41 * hash + (int) (this.dataModyfikacji ^ (this.dataModyfikacji >>> 32));
        hash = 41 * hash + (int) (this.rozmiarPliku ^ (this.rozmiarPliku >>> 32));
        hash = 41 * hash + (this.sumaKontrolna != null ? this.sumaKontrolna.hashCode() : 0);
        return hash;
    }
}
